/**
 * 
 */
package br.com.localfloripa.services;

import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.inject.Inject;
import javax.inject.Named;
import javax.security.auth.login.LoginException;

import org.primefaces.model.SortOrder;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import br.com.localfloripa.dao.AnuncioDao;
import br.com.localfloripa.entities.Anuncio;
import br.com.localfloripa.entities.Usuario;

/**
 * @author alan
 * @10/03/2012
 *
 */
@Service("anuncioService")
@Scope("singleton")
public class AnuncioService extends ServiceMain {

	private static final long serialVersionUID = -5895616433150990964L;
	
	@Inject
	@Named("anuncioDao")
	private AnuncioDao anuncioDao;

	public AnuncioService() {
		
	}	
	
	public List<Anuncio> listLancamentos(Integer rows) throws Exception {
				
		List<Anuncio> anuncios = null;
		if (Usuario.hasRole("ADMIN")) {
			anuncios = anuncioDao.listLancamentos(rows);
		} else if (Usuario.hasRole("CLIENTE") || Usuario.hasRole("IMOBILIARIA") || Usuario.hasRole("CORRETOR") ) {
			anuncios = anuncioDao.listLancamentosByIdUsuario(rows, Usuario.getLoggedUser().getId());
		} else {
			ResourceBundle bundle = ResourceBundle.getBundle("messages.MessageBundle");
			throw new LoginException(bundle.getString("messages.authority.error"));
		}		
		return anuncios;
				
	}
	
	public List<Anuncio> listLancamentosLazy(int first, int pageSize) throws Exception {
		
		List<Anuncio> anuncios = null;
		if (Usuario.hasRole("ADMIN")) {
			anuncios = anuncioDao.listLancamentosLazy(first, pageSize);
		} else if (Usuario.hasRole("CLIENTE") || Usuario.hasRole("IMOBILIARIA") || Usuario.hasRole("CORRETOR") ) {
			anuncios = anuncioDao.listLancamentosByIdUsuarioLazy(first, pageSize, Usuario.getLoggedUser().getId());
		} else {
			ResourceBundle bundle = ResourceBundle.getBundle("messages.MessageBundle");
			throw new LoginException(bundle.getString("messages.authority.error"));
		}		
		return anuncios;
	}
	
	public Long countLancamentos() throws Exception {
		
		Long rows = 0L;
		if (Usuario.hasRole("ADMIN")) {
			rows = anuncioDao.countLancamentos();
		} else if (Usuario.hasRole("CLIENTE") || Usuario.hasRole("IMOBILIARIA") || Usuario.hasRole("CORRETOR") ) {
			rows = anuncioDao.countLancamentosByIdUsuario(Usuario.getLoggedUser().getId());
		} else {			
			throw new LoginException(bundle.getString("messages.authority.error"));
		}		
		return rows;
	}
	
	public List<Anuncio> listDestaques(Integer rows) throws Exception {
		
		List<Anuncio> anuncios = null;
		if (Usuario.hasRole("ADMIN")) {
			anuncios = anuncioDao.listDestaques(rows);
		} else if (Usuario.hasRole("CLIENTE") || Usuario.hasRole("IMOBILIARIA") || Usuario.hasRole("CORRETOR") ) {
			anuncios = anuncioDao.listDestaquesByIdUsuario(rows, Usuario.getLoggedUser().getId());
		} else {			
			throw new LoginException(bundle.getString("messages.authority.error"));
		}		
		return anuncios;
	}
	
	public Anuncio findById(Long idAnuncio) throws Exception {
		
		Anuncio anuncio = null;
		if (Usuario.isAuthenticated()) {
			anuncio = anuncioDao.findById(idAnuncio);
		} else {
			throw new LoginException(bundle.getString("messages.authority.error"));
		}		
		return anuncio;
	}
	
	
	
}
